import request from '@/utils/request'

/**
 * 角色管理API接口
 */

/**
 * 分页查询角色列表
 * @param {Object} params - 查询参数
 * @param {string} params.roleName - 角色名称
 * @param {string} params.roleCode - 角色编码
 * @param {number} params.status - 状态
 * @param {number} params.page - 页码
 * @param {number} params.size - 每页大小
 * @returns {Promise} 角色列表数据
 */
export const getRoleList = (params) => {
  return request({
    url: '/roles/page',
    method: 'get',
    params
  })
}

/**
 * 分页查询角色列表（别名方法）
 * @param {Object} params - 查询参数
 * @param {string} params.roleName - 角色名称
 * @param {string} params.roleCode - 角色编码
 * @param {number} params.status - 状态
 * @param {number} params.current - 页码
 * @param {number} params.size - 每页大小
 * @returns {Promise} 角色列表数据
 */
export const getRolePage = (params) => {
  return request({
    url: '/roles/page',
    method: 'get',
    params
  })
}

/**
 * 获取所有启用的角色
 * @returns {Promise} 角色列表数据
 */
export const getAllEnabledRoles = () => {
  return request({
    url: '/roles/enabled',
    method: 'get'
  })
}

/**
 * 根据ID获取角色详情
 * @param {number} id - 角色ID
 * @returns {Promise} 角色详情数据
 */
export const getRoleById = (id) => {
  return request({
    url: `/roles/${id}`,
    method: 'get'
  })
}

/**
 * 新增角色
 * @param {Object} data - 角色数据
 * @param {string} data.roleName - 角色名称
 * @param {string} data.roleCode - 角色编码
 * @param {string} data.description - 角色描述
 * @param {number} data.status - 状态
 * @param {number} data.sortOrder - 排序号
 * @returns {Promise} 操作结果
 */
export const createRole = (data) => {
  return request({
    url: '/roles',
    method: 'post',
    data
  })
}

/**
 * 更新角色
 * @param {number} id - 角色ID
 * @param {Object} data - 角色数据
 * @param {string} data.roleName - 角色名称
 * @param {string} data.roleCode - 角色编码
 * @param {string} data.description - 角色描述
 * @param {number} data.status - 状态
 * @param {number} data.sortOrder - 排序号
 * @returns {Promise} 操作结果
 */
export const updateRole = (id, data) => {
  return request({
    url: `/roles/${id}`,
    method: 'put',
    data
  })
}

/**
 * 更新角色状态
 * @param {number} id - 角色ID
 * @param {Object} data - 状态数据
 * @param {number} data.status - 状态
 * @returns {Promise} 操作结果
 */
export const updateRoleStatus = (id, data) => {
  return request({
    url: `/roles/${id}/status`,
    method: 'put',
    data
  })
}

/**
 * 删除角色
 * @param {number} id - 角色ID
 * @returns {Promise} 操作结果
 */
export const deleteRole = (id) => {
  return request({
    url: `/roles/${id}`,
    method: 'delete'
  })
}

/**
 * 根据用户ID获取角色列表
 * @param {number} userId - 用户ID
 * @returns {Promise} 角色列表数据
 */
export const getUserRoles = (userId) => {
  return request({
    url: `/roles/user/${userId}`,
    method: 'get'
  })
}

/**
 * 为用户分配角色
 * @param {Object} data - 分配数据
 * @param {number} data.userId - 用户ID
 * @param {Array<number>} data.roleIds - 角色ID列表
 * @returns {Promise} 操作结果
 */
export const assignUserRoles = (data) => {
  return request({
    url: '/roles/assign',
    method: 'post',
    data
  })
}

/**
 * 为角色分配用户
 * @param {Object} data - 分配数据
 * @param {number} data.roleId - 角色ID
 * @param {Array<number>} data.userIds - 用户ID列表
 * @returns {Promise} 操作结果
 */
export const assignUserRole = (data) => {
  return request({
    url: '/roles/assign-users',
    method: 'post',
    data
  })
}

/**
 * 移除用户角色
 * @param {number} userId - 用户ID
 * @param {number} roleId - 角色ID
 * @returns {Promise} 操作结果
 */
export const removeUserRole = (userId, roleId) => {
  return request({
    url: `/roles/user/${userId}/role/${roleId}`,
    method: 'delete'
  })
}

/**
 * 获取用户角色关联列表
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码
 * @param {number} params.size - 每页大小
 * @returns {Promise} 用户角色关联数据
 */
export const getUserRoleList = (params) => {
  return request({
    url: '/roles/user-roles',
    method: 'get',
    params
  })
}